package com.pis.persistence;

import java.util.List;

import com.pis.model.Consulta;
import com.pis.model.Funcionario;
import com.pis.model.Paciente;
import com.pis.util.DataBaseConnection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 * @author Philippe Moneda at philippemoneda@gmail.com
 */
public class ConsultaDAO implements IConsultaDAO {

    @Override
    public boolean add(Consulta t) {
        String sql = "INSERT INTO pis.Consulta (Funcionario_CPF, Paciente_CPF, ValorConsultaTabelado, StatusConsulta, MotivoConsulta, HorarioConsulta, Dia)"
                + " VALUES ('" + t.getFuncionario().getPessoa().getCpf() + "', '" + t.getPaciente().getPessoa().getCpf() + "', "
                + t.getValor() + ", '" + t.getStatus() + "', '" + t.getMotivo() + "', '" + t.getHorario() + "', '" + t.getDia() + "')";
        try {
            if (DataBaseConnection.UpdateDB(sql) > 0) {
                return true;
            }
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return false;
    }

    @Override
    public boolean edit(Consulta _new, Consulta _old) {
        String sql = "UPDATE pis.Consulta SET StatusConsulta = '" + _new.getStatus() + "', Funcionario_CPF = '" + _new.getFuncionario().getPessoa().getCpf() + "',"
                + " Paciente_CPF = '" + _new.getPaciente().getPessoa().getCpf() + "', ValorConsultaTabelado = " + _new.getValor() + ", MotivoConsulta = '" + _new.getMotivo() + "',"
                + " HorarioConsulta = '" + _new.getHorario() + "', Dia = '" + _new.getDia() + "' WHERE idConsulta = " + _old.getId();
        try {
            if (DataBaseConnection.UpdateDB(sql) > 0) {
                return true;
            }
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    @Override
    public boolean del(Consulta t) {
       String sql = "delete from Consulta where idConsulta = "+t.getId();
       try {
            if (DataBaseConnection.UpdateDB(sql) > 0) {
                return true;
            }
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    @Override
    public List<Consulta> findAll() {
        String sql = "select * from Consulta";
        try {
            ResultSet rs = DataBaseConnection.getQuery(sql);
            ArrayList<Consulta> lista = new ArrayList<Consulta>();
            while(rs.next()){
                Consulta consulta = new Consulta();
                Funcionario func = new FuncionarioDAO().getByCPF(rs.getString("funcionario_cpf"));
                Paciente pac = new PacienteDAO().getByCPF(rs.getString("paciente_cpf"));
                consulta.setDia(rs.getString("dia"));
                consulta.setHorario(rs.getString("horarioConsulta"));
                consulta.setId(rs.getInt("idConsulta"));
                consulta.setMotivo(rs.getString("motivoConsulta"));
                consulta.setPaciente(pac);
                consulta.setFuncionario(func);
                consulta.setStatus(rs.getString("statusConsulta"));
                consulta.setValor(rs.getDouble("valorConsultaTabelado"));
                lista.add(consulta);
            }
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return null;
    }

    @Override
    public Consulta getByID(int id) {
        String sql = "Select * from Consulta where idConsulta="+id;
        try {
            ResultSet rs = DataBaseConnection.getQuery(sql);
            
            if(rs.next()){
                Consulta consulta = new Consulta();
                Funcionario func = new FuncionarioDAO().getByCPF(rs.getString("funcionario_cpf"));
                Paciente pac = new PacienteDAO().getByCPF(rs.getString("paciente_cpf"));
                consulta.setDia(rs.getString("dia"));
                consulta.setHorario(rs.getString("horarioConsulta"));
                consulta.setId(rs.getInt("idConsulta"));
                consulta.setMotivo(rs.getString("motivoConsulta"));
                consulta.setPaciente(pac);
                consulta.setFuncionario(func);
                consulta.setStatus(rs.getString("statusConsulta"));
                consulta.setValor(rs.getDouble("valorConsultaTabelado"));
            
                return consulta;
            }
            
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
